EXPORT_SYMBOL(gnttab_grant_foreign_access);
+EXPORT_SYMBOL(gnttab_end_foreign_access_ref);
EXPORT_SYMBOL(gnttab_end_foreign_access);
EXPORT_SYMBOL(gnttab_query_foreign_access);
EXPORT_SYMBOL(gnttab_grant_foreign_transfer);
+EXPORT_SYMBOL(gnttab_end_foreign_transfer_ref);
EXPORT_SYMBOL(gnttab_end_foreign_transfer);
EXPORT_SYMBOL(gnttab_alloc_grant_references);
EXPORT_SYMBOL(gnttab_free_grant_references);
}
void
-gnttab_end_foreign_access(grant_ref_t ref, int readonly)
+gnttab_end_foreign_access_ref(grant_ref_t ref, int readonly)
{
u16 flags, nflags;
printk(KERN_ALERT "WARNING: g.e. still in use!\n");
}
while ( (nflags = synch_cmpxchg(&shared[ref].flags, flags, 0)) != flags );
+}
+void
+gnttab_end_foreign_access(grant_ref_t ref, int readonly)
+{
+ gnttab_end_foreign_access_ref(ref, readonly);
put_free_entry(ref);
}
}
unsigned long
-gnttab_end_foreign_transfer(grant_ref_t ref)
+gnttab_end_foreign_transfer_ref(grant_ref_t ref)
{
unsigned long frame = 0;
u16 flags;
flags = shared[ref].flags;
-#ifdef CONFIG_XEN_NETDEV_GRANT_RX
- /*
- * But can't flags == (GTF_accept_transfer | GTF_transfer_completed)
- * if gnttab_donate executes without interruption???
- */
-#else
- ASSERT(flags == (GTF_accept_transfer | GTF_transfer_committed));
-#endif
+
/*
* If a transfer is committed then wait for the frame address to appear.
* Otherwise invalidate the grant entry against future use.
while ( unlikely((frame = shared[ref].frame) == 0) )
cpu_relax();
- put_free_entry(ref);
+ return frame;
+}
+unsigned long
+gnttab_end_foreign_transfer(grant_ref_t ref)
+{
+ unsigned long frame = gnttab_end_foreign_transfer_ref(ref);
+ put_free_entry(ref);
return frame;
}
"still in use by backend domain.\n");
goto out;
}
- gnttab_end_foreign_access(grant_tx_ref[id], GNTMAP_readonly);
+ gnttab_end_foreign_access_ref(grant_tx_ref[id], GNTMAP_readonly);
gnttab_release_grant_reference(&gref_tx_head, grant_tx_ref[id]);
grant_tx_ref[id] = GRANT_INVALID_REF;
#endif
#ifdef CONFIG_XEN_NETDEV_GRANT_RX
ref = grant_rx_ref[rx->id];
grant_rx_ref[rx->id] = GRANT_INVALID_REF;
- mfn = gnttab_end_foreign_transfer(ref);
+ mfn = gnttab_end_foreign_transfer_ref(ref);
gnttab_release_grant_reference(&gref_rx_head, ref);
#endif
int gnttab_grant_foreign_access(domid_t domid, unsigned long frame,
int readonly);
+void gnttab_end_foreign_access_ref(grant_ref_t ref, int readonly);
void gnttab_end_foreign_access(grant_ref_t ref, int readonly);
int gnttab_grant_foreign_transfer(domid_t domid, unsigned long pfn);
+unsigned long gnttab_end_foreign_transfer_ref(grant_ref_t ref);
unsigned long gnttab_end_foreign_transfer(grant_ref_t ref);
int gnttab_query_foreign_access(grant_ref_t ref);